import { ref, unref } from "vue";
import { uploadSingleBase64 } from "@/api/index";
import { fileToBase64 } from "@/utils";

export function useUploadBase() {
  // 上传文件框
  const inputRef = ref();
  // 文件信息
  const loading = ref(false);
  // 选择文件
  const selectFile = () => {
    if (unref(loading)) return;
    unref(inputRef)?.click(); // 触发文件选择框
  };
  // 上传文件
  const uploadFile = (file, filename) => {
    if (!file) return;
    if (unref(loading)) return;
    loading.value = true;
    uploadSingleBase64({
      file: encodeURIComponent(file),
      filename: filename,
    })
      .then((res) => {
        if (+res.code === 0) {
          alert(
            `文件已经上传成功~~,您可以基于 ${res.servicePath} 访问这个资源~~`
          );
          return;
        }
        return Promise.reject(res.codeText);
      })
      .catch((err) => {
        console.log(err);
        alert("文件上传失败，请您稍后再试~~");
      })
      .finally(() => {
        loading.value = false;
      });
  };
  // 文件选中
  const changeFile = async () => {
    const file = unref(inputRef)?.files[0]; // 选择文件数据
    if (!file) return;
    // 文件限制
    if (!/(PNG|JPG|JPEG)/i.test(file.name)) {
      return alert("上传文件只能是 PNG/JPG/JPEG 格式");
    }
    // 大小限制
    if (file.size > 2 * 1024 * 1024) {
      return alert("上传文件大小不能超过2MB");
    }
    try {
      let base64 = await fileToBase64(file); // 将文件数据转为 base64
      uploadFile(base64, file.name);
    } catch (err) {
      console.log(err);
    }
  };

  return {
    inputRef,
    loading,
    selectFile,
    changeFile,
    uploadFile,
  };
}
